//package abg.core.common.ws;
//
//import io.netty.channel.ChannelOption;
//import io.netty.channel.EventLoopGroup;
//import io.netty.channel.nio.NioEventLoopGroup;
//import io.netty.channel.socket.nio.NioServerSocketChannel;
//import io.netty.handler.logging.LogLevel;
//import io.netty.handler.logging.LoggingHandler;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//@Configuration
//public class WebSocketConfig {
//
//    @Value("${websocket.server.port:0}")
//    private int port;
//
//    @Bean
//    public NioEventLoopGroup bossGroup() {
//        return new NioEventLoopGroup();
//    }
//
//    @Bean
//    public NioEventLoopGroup workerGroup() {
//        return new NioEventLoopGroup();
//    }
//
//    @Bean
//    public void startWebSocketServer() throws InterruptedException {
//        if (port == 0) return;
//        EventLoopGroup bossGroup = bossGroup();
//        EventLoopGroup workerGroup = workerGroup();
//        try {
//            new io.netty.bootstrap.ServerBootstrap()
//                    .group(bossGroup, workerGroup)
//                    .channel(NioServerSocketChannel.class)
//                    .handler(new LoggingHandler(LogLevel.INFO))
//                    .childHandler(new WebSocketServerInitializer())
//                    .option(ChannelOption.SO_BACKLOG, 128)
//                    .childOption(ChannelOption.SO_KEEPALIVE, true)
//                    .bind(port)
//                    .sync()
//                    .channel()
//                    .closeFuture()
//                    .sync();
//        } finally {
//            bossGroup.shutdownGracefully();
//            workerGroup.shutdownGracefully();
//        }
//    }
//}
